const path = require('path')
const webpack = require('webpack')
const {CleanWebpackPlugin} = require('clean-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
// 可以读取.env文件， 获取里面的值 设置到process.env里面
const dotenv = require('dotenv')
dotenv.config()

console.log('.env process.env.NODE_ENV',process.env.NODE_ENV)
console.log('.env ',process.env.HOSTNAME)
module.exports = {
  entry:{
    app:'@/index.ts'
  },

  output:{
    filename:'[name].bundle.js',
    path:path.resolve(__dirname,'dist'),
    clean: true
  },
  module:{
    rules:[
      {
        test:/\.css$/,
        // 执行顺序是倒序
        use:['style-loader','css-loader']
      },
      //匹配图片
      {
        test:/\.(png|svg|jpg|gif)$/,
        use:['file-loader']
      },
      // 匹配文字
      {
        test:/\.(woff|woff2|eot|ttf|otf)$/,
        use:['file-loader']
      },
      // 匹配ts
      {
        test: /\.tsx?$/, 
        exclude: /node_modules/,
        use: [
          {
            loader: "babel-loader",
            options: {
              presets: ['@babel/preset-env']
            }
          },
          "ts-loader"
        ]
       
        // loader: ["babel-loader","ts-loader"] ,

      }
    ]
  },
  resolve:{
    alias:{
     "@": path.resolve(__dirname,"src")
    },
    // Add `.ts` and `.tsx` as a resolvable extension.
    extensions: [".ts", ".tsx", ".js"]
    // 这个配置英文文档 有空看一下
    // fallback:{
    //   "path": false,
    //   "os": false,
    //   "fs":false
    // }
  },
  plugins:[
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
      title:'Production',
      template:"./www/index.html"
    }),
    // 定义全局变量 在任何模块都可以访问
    new webpack.DefinePlugin({
      // 定义在编译使用的全局变量 在浏览器运行阶段时就是值了
      // 'process.env.NODE_ENV': JSON.stringify('production'),
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
      ENV: JSON.stringify('ENV')
    }),
    // 热膜替换
    new webpack.HotModuleReplacementPlugin()
    // ,
    // new webpack.ProvidePlugin({
    //   process: 'process/browser'
    // }),
  ]
}